#!/usr/bin/python3.8.9
# -*- coding: utf-8 -*-

# @Author  : Tina Yu
# @Time    : 2021-8-14 5:59
from plotly import offline
from plotly.graph_objs import Bar, Layout

from die import Die

# 创建一个D6
die_1, die_2 = Die(), Die()

# 掷几次骰子，并将结果存储在一个列表中
results = [die_1.roll() + die_2.roll() for roll_num in range(1000)]

# 分析结果:统计两个骰子点数的和
max_result = die_1.num_sides + die_2.num_sides
frequencies = [results.count(value) for value in range(2, max_result + 1)]

# 对结果进行可视化：绘制直方图
x_values = list(range(3, max_result + 1))  # 横坐标的值

# plotly不能接受函数range的结果，因此需要使用函数list将其转换为列表。
# Bar表示用于绘制条形图的数据集，接收x值的列表和y值列表两个参数
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': '结果', 'dtick': 1}  # dtick设置x轴显示的刻度间距
y_axis_config = {'title': '结果的频率'}

# Layout返回一个指定图标布局和配置的对象
my_layout = Layout(title='掷一个D8和一个D8骰子1000次的结果', xaxis=x_axis_config, yaxis=y_axis_config)

# offline.plot需要一个包含数据和布局对象的字典，还接收一个文件名
offline.plot({'data': data, 'layout': my_layout}, filename='d_d_d.html')
